#include <iostream>
using namespace std;

/*
   作用：
        只要你新建对象，类的构造函数都会被自动调用(对象不能主动调用构造函数)
        构造函数专门用来新建对象的
        实际应用：往往用来初始化对象
   特点：
        第一：构造函数的名字必须跟类名相同
        第二：构造函数没有返回值类型
        第三：如果程序员没有定义构造函数，系统会自动帮你生成一个无参的构造函数
            Cat()  系统提供的所有构造函数都没有任何打印语句
            {
               什么事情都不做，只帮你创建对象，分配空间
          }
         如果程序员自定义构造函数(无论是否带参数)，那么系统就不会再自动生成默认的构造函数
        第四：构造函数可以重载，重载构造函数是为了实现创建对象的多样化

*/

class Cat
{
public:
    // 构造函数
    Cat()
    {
        this->age = 0;
        this->weight = 0;
        cout << "无参的构造函数" << endl;
    }
    Cat(int age)
    {
        this->age = age;
        this->weight = 0;
        cout << "有参的构造函数" << endl;
    }
    Cat(int age, int weight)
    {
        this->age = age;
        this->weight = weight;
        cout << "有参的构造函数" << endl;
    }

    void show()
    {
        cout << "age = " << age << endl;
        cout << "weight = " << weight << endl;
    }

private:
    int age;
    int weight;
};

int main()
{
    Cat cat1;         // 创建猫对象，没有参数，调用无参的构造函数
    Cat cat2(10);     // 创建猫对象，有一个参数，调用有参的构造函数
    Cat cat3(30, 20); // 创建猫对象，有两个参数，调用有参的构造函数

    cat1.show();
    cat2.show();
    cat3.show();
    return 0;
}